/*
 * https://github.com/morethanwords/tweb
 * Copyright (C) 2019-2021 Eduard Kuzmenko
 * https://github.com/morethanwords/tweb/blob/master/LICENSE
 */

$transition: .2s ease-in-out;

.preloader {
  &-circular {
    //animation: rotate 2s linear infinite;
    animation: rotate 1s linear infinite;
    height: 100%;
    transform-origin: center center;
    /* width: 100%; */
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
  }

  &-path {
    //stroke-dasharray: 1, 200;
    stroke-dasharray: 93.6375, 124.85; // 75%
    stroke-dashoffset: 0;
    //animation: dash 1.5s ease-in-out infinite/* , color 6s ease-in-out infinite */;
    stroke-linecap: round;
    stroke: white;
    stroke-width: 3;
  }

  &-container {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
    width: 54px;
    height: 54px;
    display: flex;
    cursor: pointer;
    overflow: hidden; // * fix overflow of rotate

    opacity: 0;
    transform: scale(0);

    body:not(.animation-level-0) & {
      transition: opacity $transition, transform $transition;
    }

    &.is-visible {
      &:not(.backwards) {
        opacity: 1;
        transform: scale(1);
      }
    }
  }
}

.preloader-container {
  --color: #fff;

  .you-spin-me-round {
    width: 100%;
    height: 100%;
  }

  .preloader-circular {
    animation: none;
    background-color: rgba(0, 0, 0, .3);
    border-radius: 50%;
    width: 100%;
    height: 100%;
  }

  .preloader-path-new {
    stroke-dasharray: 5, 149.82;
    //stroke-dasharray: 112.36, 149.82;
    stroke-dashoffset: 0;
    
    stroke-linecap: round;
    stroke: var(--color);
    stroke-width: 2;
  }

  @include animation-level(2) {
    &.is-visible:not(.manual), &.is-visible.animating {
      .you-spin-me-round {
        animation: rotate 2s linear infinite;
      }
  
      .preloader-path-new {
        transition: stroke-dasharray $transition, stroke-width $transition;
      }
    }
  }

  &.preloader-swing {
    cursor: default;

    .you-spin-me-round {
      animation: rotate 1s linear infinite !important;
    }

    .preloader-path-new {
      //animation: dashNew 1.5s ease-in-out infinite;
      stroke-dasharray: 112.36, 149.82;
    }

    &.preloader-streamable .preloader-path-new {
      stroke-dasharray: 88.95, 118.61;
    }
  }

  .preloader-close, .preloader-download {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    margin: auto;
    color: var(--color);
    width: 56%;
    height: 56%;
    //transform: scale(1);
    opacity: 1;
    
    @include animation-level(2) {
      transition: opacity .2s ease-in-out/* , transform .2s ease-in-out */;
    }

    path {
      fill: var(--color);
    }

    @include hover() {
      background: none;
    }
  }

  &:not(.manual) .preloader-download, 
  &.manual .preloader-close {
    opacity: 0;
    //transform: scale(.5);
  }

  &.manual .preloader-path-new {
    stroke-width: 0;
  }

  .preloader-download {
    width: 1.5rem;
    height: 1.5rem;
  }

  &.preloader-streamable {
    &, svg {
      cursor: pointer !important;
    }

    circle {
      stroke-width: 2.5 !important;
      //animation: dashNewStreamable 1.5s ease-in-out infinite !important;
    }

    &:after {
      content: "";
      position: absolute;
      width: .8125rem;
      height: .8125rem;
      border-radius: .125rem;
      background-color: var(--color);
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
  }

  &.preloader-transparent {
    .preloader-circular {
      background-color: transparent;
    }
  }

  &.preloader-bold {
    .preloader-path-new {
      stroke-width: 3.5;
    }
  }
}

@keyframes rotate {
  100% {
    transform: rotate(360deg);
  }
}

@keyframes dash {
  0% {
    stroke-dasharray: 1, 200;
    stroke-dashoffset: 0;
  }
  50% {
    stroke-dasharray: 89, 200;
    stroke-dashoffset: -35px;
  }
  100% {
    stroke-dasharray: 89, 200;
    stroke-dashoffset: -124px;
  }
}

@keyframes dashNew {
  0% {
    stroke-dasharray: 1, 149.82; // 149.82 = getTotalLength
    stroke-dashoffset: 0;
  }
  50% {
    stroke-dasharray: 112.36, 149.82; // 112.36 = 149.82 * .75
    stroke-dashoffset: -38; // bruted
  }
  100% {
    stroke-dasharray: 112.36, 149.82;
    stroke-dashoffset: -149.82; // totalLength
  }
}

@keyframes dashNewStreamable {
  0% {
    stroke-dasharray: 1, 200;
    stroke-dashoffset: 0;
  }
  50% {
    stroke-dasharray: 89, 200;
    stroke-dashoffset: -35px;
  }
  100% {
    stroke-dasharray: 89, 200;
    stroke-dashoffset: -237%;
  }
}
